<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 构造函数， 函数名的首字母大写
        /* function Person(name,age){
            this.name = name;
            this.age = age;
            this.jump = function(){
                console.log('王洋洋一跳8米');
            }
        }
        // 实例对象
        let p1 = new Person('tom',18);
        console.log(p1);
        // 往原型对象上添加属性和方法
        Person.prototype.sex = '男';
        Person.prototype.hobby = function(){
            console.log('性别男，喜爱女！！')
        }
        Person.test = function(){
            console.log('person自身上的方法')
        }
        console.dir(Person); */

        // class类俗称构造函数的语法糖
        class Person{

            // 构造器
            constructor(name,age){
                this.name = name;
                this.age = age;
                this.jump = function(){
                    console.log('洋洋一跳八米高！！');
                    console.log(this);//实例对象
                }
            }
            // 如何往原型对象上添加属性和方法
            zihao(){
                console.log('子豪一跳2米高！！');
                console.log(this);//实例对象
            }
            // 在所有实例对象上添加属性
            color = 'yellow'
            // static后面跟的属性和方法 添加到Person类自身上，这种称之为静态的属性和方法
            static hobby(){
                console.log('这个爱好在哪里！！');
                console.log(this);//Person
            }
            static nvpengyou = 'xiaohong'
        }
        // 实例对象
        let p2 = new Person('yangyang',18);
        console.log(p2);

        let p3 = new Person('xuecheng',20);
        console.log(p3);

        console.dir(Person);

        // 调用静态属性方法
        Person.hobby();
        console.log(Person.nvpengyou);
        // 调用原型对象上的属性和方法
        p2.zihao();

        p2.jump();
        p2.zihao();
        Person.hobby();
        let p4 = new Person('puguanxu',18);
        console.log(p4);
        let {name,age,jump,color} = p4
        console.log(jump);
        jump();//class中默认是严格模式 此处this为undefined
        function foo(){
            console.log(this);
        }
        foo();//window
        let obj = {
            name:"tom",
            jump(){
                console.log(this);
            }
        }
        obj.jump();
        let test = obj.jump;
        console.log(test);
        test();
    </script>
</body>
</html>